package com.java.jvm.loader;

import java.util.Arrays;

/**
 * 问题：
 * 1)通过类型定义变量，类会被加载吗？(不会)
 * 2)类加载时一定会执行静态代码块吗？(不一定)
 * 3)类加载时什么时候会执行静态代码块呢？(类加载时触发初始化操作。)
 *
 * 注意：类加载也具备懒加载特性(不需要的类可以暂时不加载)
 */
class ClassA{
    public static int a=10;
    static{
        System.out.println("ClassA.static{}");
    }
}
public class ClassLoaderTraceTests {
    public static void main(String[] args) throws ClassNotFoundException {
        //ClassA clsA=null;
        //int a=ClassA.a;//隐式加载(ClassA这个类会被读到内存，并且执行静态代码块)
        //System.out.println(a);
        //ClassLoader.getSystemClassLoader()
               //显式加载，此时静态代码块不会执行
              // .loadClass("com.java.jvm.loader.ClassA") ;

          //Class.forName("com.java.jvm.loader.ClassA");//类会加载，静态代码块也执行
        Class.forName("com.java.jvm.loader.ClassA",
                true,//false不执行初始化动作,静态代码块不执行
                ClassLoader.getSystemClassLoader());

    }
}
